﻿/*
 * 2023/3/10
 * 订单控制器
 * 
 * 
 * **/
using Max.PH5_2008A.ShoppingCode.IService;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace Max.PH5_2008A.ShoppingCode.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class OrderController : ControllerBase
    {

        IOrderMasterService _orderMasterService;
        IOrderDetailService _orderDetailService;
        INewProductSKUService _productSKUSService;

        [HttpPost]
        public IActionResult CreateOrder()
        {
            /*
             * 创建订单，后台都需要处理哪些数据
             * 1、订单主表和订单明细需要保存数据
             * 2、需要将订单中的商品信息，从缓存中移除。（避免重复结算）
             * 3、修改订单中的商品的可用库存及锁定库存
             * 
             * **/

            #region 1、插入订单相关信息

            //添加订单信息和订单明细信息 (订单主表和订单明细关系：一对多)
            //插入订单主表信息
            _orderMasterService.Insert(new Domain.OrderMasterEntity());  //======================

            List<Domain.OrderDetailEntity> orderDetails = new List<Domain.OrderDetailEntity>();  //===========================
            //循环插入订单明细表（即订单对应的商品信息）
            orderDetails.ForEach(x =>
            {
                _orderDetailService.Insert(x);
            });

            #endregion

            #region 2、修改缓存
            string key = ""; //用户id  //=======================================
            var redis = new  CSRedis.CSRedisClient("127.0.0.1:6379");
            var redisList = redis.Get<List<Dto.ShoppingCarDto>>(key); //拿到缓存里的数据

            //要删除的商品就是保存到订单明细表中的商品
            orderDetails.ForEach(x =>
            {
                var m = redisList.Where(p => p.GoodsId.Equals(x.SKUId.ToString())).FirstOrDefault();
                if (m != null)
                    redisList.Remove(m);
            });
            //删除完成后，需要更新缓存
            redis.Set(key, redisList);

            #endregion


            #region 3、修改库存

            #endregion


            return Ok();
        }
    }
}
